{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns; sns.set(color_codes=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "tips = sns.load_dataset(\"tips\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>total_bill</th>\n",
       "      <th>tip</th>\n",
       "      <th>sex</th>\n",
       "      <th>smoker</th>\n",
       "      <th>day</th>\n",
       "      <th>time</th>\n",
       "      <th>size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16.99</td>\n",
       "      <td>1.01</td>\n",
       "      <td>Female</td>\n",
       "      <td>No</td>\n",
       "      <td>Sun</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10.34</td>\n",
       "      <td>1.66</td>\n",
       "      <td>Male</td>\n",
       "      <td>No</td>\n",
       "      <td>Sun</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>21.01</td>\n",
       "      <td>3.50</td>\n",
       "      <td>Male</td>\n",
       "      <td>No</td>\n",
       "      <td>Sun</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>23.68</td>\n",
       "      <td>3.31</td>\n",
       "      <td>Male</td>\n",
       "      <td>No</td>\n",
       "      <td>Sun</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24.59</td>\n",
       "      <td>3.61</td>\n",
       "      <td>Female</td>\n",
       "      <td>No</td>\n",
       "      <td>Sun</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>239</th>\n",
       "      <td>29.03</td>\n",
       "      <td>5.92</td>\n",
       "      <td>Male</td>\n",
       "      <td>No</td>\n",
       "      <td>Sat</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>240</th>\n",
       "      <td>27.18</td>\n",
       "      <td>2.00</td>\n",
       "      <td>Female</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Sat</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>241</th>\n",
       "      <td>22.67</td>\n",
       "      <td>2.00</td>\n",
       "      <td>Male</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Sat</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>242</th>\n",
       "      <td>17.82</td>\n",
       "      <td>1.75</td>\n",
       "      <td>Male</td>\n",
       "      <td>No</td>\n",
       "      <td>Sat</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>243</th>\n",
       "      <td>18.78</td>\n",
       "      <td>3.00</td>\n",
       "      <td>Female</td>\n",
       "      <td>No</td>\n",
       "      <td>Thur</td>\n",
       "      <td>Dinner</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>244 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     total_bill   tip     sex smoker   day    time  size\n",
       "0         16.99  1.01  Female     No   Sun  Dinner     2\n",
       "1         10.34  1.66    Male     No   Sun  Dinner     3\n",
       "2         21.01  3.50    Male     No   Sun  Dinner     3\n",
       "3         23.68  3.31    Male     No   Sun  Dinner     2\n",
       "4         24.59  3.61  Female     No   Sun  Dinner     4\n",
       "..          ...   ...     ...    ...   ...     ...   ...\n",
       "239       29.03  5.92    Male     No   Sat  Dinner     3\n",
       "240       27.18  2.00  Female    Yes   Sat  Dinner     2\n",
       "241       22.67  2.00    Male    Yes   Sat  Dinner     2\n",
       "242       17.82  1.75    Male     No   Sat  Dinner     2\n",
       "243       18.78  3.00  Female     No  Thur  Dinner     2\n",
       "\n",
       "[244 rows x 7 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tips"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.regplot(x=\"total_bill\", y=\"tip\", data=tips)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "def plot_trendline(x, y, n):\n",
    "    mpl.pylab.plot(x, y,  'ko')\n",
    "    parameter = np.polyfit(x, y, n) # n=1为一次函数，返回函数参数\n",
    "    f = np.poly1d(parameter) # 拼接方程\n",
    "    mpl.pylab.plot(x, f(x),\"r--\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "module 'matplotlib' has no attribute 'pylab'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-6-e6cbf4dee8cb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mplot_trendline\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtips\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mtips\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m<ipython-input-5-f5221ee51342>\u001b[0m in \u001b[0;36mplot_trendline\u001b[1;34m(x, y, n)\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mplot_trendline\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mn\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m     \u001b[0mmpl\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpylab\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m  \u001b[1;34m'ko'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      6\u001b[0m     \u001b[0mparameter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpolyfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mn\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# n=1为一次函数，返回函数参数\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      7\u001b[0m     \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpoly1d\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparameter\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# 拼接方程\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mAttributeError\u001b[0m: module 'matplotlib' has no attribute 'pylab'"
     ]
    }
   ],
   "source": [
    "plot_trendline(tips.iloc[:,0],tips.iloc[:,1],1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
